package huawei.checkandset;

import java.util.HashMap;

public class J947 {
    public static void main(String[] args) {

    }

    /**
     *
     * @param stones
     * @return
     */
    public int removeStones(int[][] stones) {
        // 使用并查集,合并点,找出联通图数量,即需要保留的点的数量
        for(int[] stone:stones){
            // 坐标最大10000,+10001区分:x,y
            // 按提议,即存在x/y坐标相同即可联通.
            merge(stone[0]+10001,stone[1]);
        }
        return stones.length-count;
    }
    HashMap<Integer,Integer> map=new HashMap<>();
    int count;
    private int find(int i){
        if(map.get(i)==null){
            map.put(i,i);
            count++;
            return i;
        }
        if(map.get(i)==i){
            return i;
        }
        return find(map.get(i));
    }
    private void merge(int i,int j){
        int iRoot=find(i);
        int jRoot=find(j);
        if(iRoot==jRoot){
            return;
        }
        map.put(iRoot,jRoot);
        count--;
    }
}
